home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Games: 500 MB Amiga Software
/
500 MB Amiga Software - Euber 130 - Amiga Games Disc & Mag.iso
/
userbox
/
demoversionen
/
pmbs-demo
/
prometheus
/
developer
/
server+portstrukturen.dok
< prev
Wrap
Text File
|
1995-09-20
|
15KB
|
558 lines
Revision 3
Dokumentation zur Port-Portstruktur von Prometheus
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FCPort Port 'rexx_PMBSx'
(x ist eine Zahl von 0-19)
b=Byte
w=Word
l=Long
c()=Char(0-terminiert) in Klammern steht die max. Länge
Adresse bekommt man per FindPort() (Offset -390 der exec.library)
Offset
236 l Screenadresse des Ports (0 wenn Iconify)
240 w Änderungsmitteilung an den Server (1=Änderung/0=nichts)
244 c(71) String (0 terminiert) der auf dem Serverbildschirm bei
dem Port angezeigt wird (also Username z.b)
350 l Flags (Bit 0 - Hide User an / nicht an)
(Bit 1 - User wartet auf Multichat)
ab 400 Daten des eingeloggten Users (Name aus 244 ermitteln)
400 l erster Login
404 l letzter Login
408 l letzte Paßwortänderung
412 l Anrufe
416 l Flags des Users (siehe Userdatendokumentation)
420 l Downloadfreiraum
424 l binäre Uploads
428 l binäre Downloads
432 l Ascii Uploads
436 l Ascii Downloads
440 l Konto
444 l Baudrate
448 l Boxanrufzahl beim letzten Login des Users
452 w Zeitlimit
454 w wieviel Zeit steht im für diesen Login zur Verfügung
456 w Top UploadCPS
458 w Top DownloadCPS
460 b Emulation (0 Keine/1 Ansi Farbe/2 Ansi Mono/3 Rip)
461 b Zeilenanzahl
462 b Tarifzone
463 b UpDoRate
464 b Modus (0 Geonet / 1 Menue / 2 Cursor)
465 b Packer
466 b Protokoll
467 b Sprache
468 l Bezugsdatum
482 l Transfernote (wenn <>0, steht hier die Adresse der
Transfernote der MEtaxpr.library... nähere Erläuterungen
in der Anleitung der Metaxpr.library
486 w Anzahl der Downloads während des aktuellen Logins
488 w Anzahl der Uploads während des aktuellen Logins
500 b intern
502 b Port für Arexx bereit (1 nicht bereit/0 bereit)
Dokumentation zur Server Portstruktur von Prometheus
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Was fehlt noch in der Dok?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Onlineflags
- Protokollflags
- Brettflags
- Befelsflags
- Gruppenflags
Erklärung des Datumformats
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dieses Datumformat wird benutzt bei
*Userdaten
- Letzter Login
- Bezugsdatum
- letzte Paßwortänderung
*Brettliste
- letzter Eintrag
Wie bekomme ich:
(L bedeutet Langwort.. bin zu faul)
(AND ist die logische UND Operation)
- Stunden : das L 12 Bits nach rechts schieben und dann AND mit 31 machen
- Minuten : das L 6 Bits nach rechts schieben und dann AND mit 63 machen
- Sekunden: einfach AND 63 mit dem L
- Tage : das L 17 Bits nach rechts schieben und dann AND mit 31 machen
- Monate : das L 22 Bits nach rechts schieben und dann AND mit 15 machen
- Jahre : das L 26 Bits nach rechts schieben und dann 1980 addieren
Benutzte Feldtypen
~~~~~~~~~~~~~~~~~~~~
Wenn von LIST-Strukturen geredet wird, sind die ORIGINAL Amiga
LISTSTRUKTUREN mit LISTHEADERN gemeint (im Header steht noch kein
Namenfeld!).
Dann gibt es noch ein eigenes Listen-Format... ich nenne es jetzt nur
DIM-FELD.
Man hole sich die Adresse eines DIM-FELDES. Dann holt man sich die Adresse
die an dem Langwort steht. Nun hat man den Zeiger auf das eigentliche Feld.
Beispiel in Assembler für den Brettnamen (in A6 ist die Serveradresse)
move.l 174(a6),a4
move.l (a4),a4
Jetzt steht an: (als Offset zum erhaltenen Langwort)
0 l Grösse des Feldes (wäre hier gleich (max Bretter))
ab 4 kommt jetzt das Feld (Typen c=char/l=Long/W=Word/B=Byte)
Beipiel Bytefeld:
4 1.Byte
5 2.Byte
6 3.Byte
...
Beispiel Wordfeld:
4 1.Word
6 2.Word
8 3.Word
...
Beispiel Longfeld:
4 1.Long
8 2.Long
12 3.Long
...
Ein Charfeld ist ein Longfeld das Adressen zu C-Strings (0-terminiert)
beinhaltet.
Beispiel (Brettname)
4 1.Long = $ef302434
an $ef302434 liegt jetzt ein C-String (aus GFA-BASIC einfach
auslesen mit CHAR{} oder aus BLITZ-BASIC mit PEEK$())
Wie bekomme ich Prometheus zum Speichern?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Hierzu benutzen wir das Aktionslangwort (+396), indem wir bestimmte Bits
setzen.
Bit 0 Bretter speichern
Bit 1 Userliste
Bit 2 Boxen
Bit 3 Gruppen
Bit 4 Anrufe+Auslastung
Bit 5 Preferences
Der Server speichert dann von selbst, sobald er bereit ist
Multiport Inhaltsverwaltung
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Diese Informationen sind eigentlich sehr gefährlich, da sie sehr
schwierig zu realisieren sind. Bitte auf JEDEN FALL Rücksprache mit mir
nehmen, wenn man etwas mit der Multiport-Fileverwaltung macht, damit es
hinterher keine Probleme gibt (02104 / 12796)
Man darf bei Prometheus auf gar keinen Fall ohne weiteres Indexfiles laden
oder speichern.
Bei 20400 bekommt man die Adresse eines STRING DIM FELDs mit 100 Elementen.
In den Strings steht entweder nichts, oder der Pfad zu einem Indexfile
(komplett!) z.B.
"prometheus:bretter/amiga/dfue/°inx" (nicht CASE-SENSITIVE überprüfen!!)
Man weiß nun, ob der Index schon im Ram ist oder nicht, und welche Nummer
er hat.
nun rechnet man: Adresse: 20404 (Beginn der Zusatzfelder) + Nummer*10
(Nummer fängt bei 0 an!)
jetzt steht an
Adresse+0 WORD wieviele Tasks benutzen diesen Index?
+2 WORD wieviele Einträge hat der Index
+4 LONG Adresse der Liststruktur
Prometheus verwaltet INDEXLISTEN im RAM als Liststruktur (mit Listheader).
Ab nodeadresse+14 ist dann der INDEX wie auf Platte (ohne Längenwort am
Anfang). Das ganze Eintrag ist mit 0 abgeschlossen.
also char{nodeadr%+14} liefert einen Inhaltseintrag
Index komplett einlesen
~~~~~~~~~~~~~~~~~~~~~~~~
Index ist schon im RAM:
Wollen wir jetzt einen Index einlesen, erhöhen wir zuerst den Taskzähler
um 1, damit kein anderer Task den Index im Ram löscht.
Dann können wir die Eintragsanzahl und die Liststruktur einfach benutzen.
Index ist nicht im RAM:
Index in eine LISTSTRUKTUR (HEADER 14 BYTES) lesen. Wie die NODES aufgebaut
sind bitte bei INDEX SCHLIEßEN lesen. Jeder Nodeeintrag repräsentiert einen
Inhaltseintrag!
Der Pfad wird bei einem freien Eintrag im DimFeld eingetragen. Und die
Liststruktur etc wird dann im Adressenfeld (Offset beachten) eingetragen.
20404 + (Nummer im DIM-FELD)*10. Taskzugriffe ist dann natürlich 1.
Bei jedem Nodeeintrag die Länge des Nodes im Wort vor der Adresse speichern
(siehe Index schließen)
Index schließen
~~~~~~~~~~~~~~~
Wir speichern zuerst den Index auf Platte.
Wir ziehen 1 von den Taskzugriffen ab.
Sollte die Anzahl nun 0 sein, löschen wir den Indexstring im DIMFELD und
die 8 Bytes im dazugehörigen Adressenfeld. Danach geben wir die gesamte
Listenstruktur frei (mit Listenkopf)
Der Listenkopf hat 14 BYTES. Die Länge der Listenelemente steht im Langwort
davor.
Wenn wir also eine Nodeadresse haben, geben wir ihn so frei
FREEMEM(nodeadr%-4,long{nodeadr%-4}+4)
Eintrag anhängen
~~~~~~~~~~~~~~~~
Dies ist noch das einfachste. Wir schauen, ob das Indexfile schonmal im RAM
ist,
wenn ja: neuen Nodeeintrag anhängen (ADDTAIL aus der exec.library)
danach einfach im APPEND Modus den INDEXeintrag ans INX File auf der Platte
anhängen.
Offsets zum Server
~~~~~~~~~~~~~~~~~~~~
FCSERVER Port 'rexx_PXServer'
b=Byte
w=Word
l=Long
c()=Char(0-terminiert) ind Klammern steht die max. Länge
Adresse bekommt man per FindPort() (Offset -390 der exec.library
als Parameter in a1 den Namen angeben)
Offset
150 w max Teilnehmer -1
152 w max Bretter -1
156 w max Pm
158 w max Text
160 w max Netzboxen
162 w Brettanzahl
164 w Netzboxen
166 w Teilnehmeranzahl
Anmerkung zu Brettern:
Die Bretter sind unsortiert, wenn der Brettname "" ist, ist das Brett nicht
existent, trotzdem kann im nächsten Feld wieder ein Brett sein. Die
Sortierung erfolgt über das Sortierfeld.
In Feld 0 des Sortierfeldes steht die Nummer des Brettes mit dem im
Alphabet am niedrigsten stehenden Namen. Das geht dann nach unten weiter.
Nummern gelten immer ab 0 aufwärts
Das gleiche gilt auch für Netzboxen!
170 l DIM-FELD(l) Sortierung der Bretter
174 l DIM-FELD(c) Brettname
178 l DIM-FELD(l) Letzter Eintrag
182 l DIM-FELD(c) Pfad
186 l DIM-FELD(c) ganzer Name des Brettes
190 l DIM-FELD(c) Verteiler (Boxen durch '|' getrennt)
194 l DIM-FELD(c) Gruppen
60 Bytes(LGruppe(c20)+SGruppe(c20)+IGruppe(20))
Zwischenräume mit 1-BYTES (nicht 0!) gefüllt
198 l DIM-FELD(c) ganzer Name, aber ohne Netzoberbrett
(für maximalen Speed beim Sorter)
202 l DIM-FELD(l) Sortierung der Bretter ohne Netzoberbrett
210 l DIM-FELD(w) max. Rout
214 l DIM-FELD(w) max. Inhalt
218 l DIM-FELD(w) Brettkopf (da feste Offsets einfach
Brettnummer)
222 l DIM-FELD(l) Brettflags
Bit 1 Marke
Bit 2 L.Kommentar
Bit 3
weitere Brettfelder ab 15000
226 l DIM-FELD(c) Teilnehmer (sortiert)
230 l DIM-FELD(l) Sortierung der Netzboxen
234 l DIM-FELD(c) Boxname
238 l DIM-FELD(c) PM-Route
242 l DIM-FELD(c) Paßwort
246 l DIM-FELD(c) Telefonnummer (evtl. mehrere durch '|'
getrennt)
250 l DIM-FELD(c) ModemInit
258 l DIM-DELD(w) Packernummer
262 l DIM-FELD(b) Protokollnummer
266 l DIM-FELD(l) Netzflags
274 l DIM-FELD(w) Eilmail PF/KB
278 l DIM-FLED(b) Netztyp
282 l DIM-FELD(c) Domain
300 l Servermem
304 l Portmem
308 l Sortermem
312 l Puffermem
316 l -frei-
320 l Readbuffer
324 l Writebuffer
328 l Adresse der PROMETHEUS.LIBRARY
332 l Adresse der GADTOOLS.LIBRARY
336 l Adresse der ASL.LIBRARY
340 l Windowadresse des Servers
344 l Screenadresse des Servers
348 l -nicht öffentlich-
352 l -nicht öffentlich-
356 l -nicht öffentlich-
360 w Fonthöhe (Oberfläche)
362 w Fonthöhe (Text)
364 l Adresse der DISKFONT.LIBRARY
368 l Fontadresse (Oberfläche)
376 l Screenbreite (Port+Server)
380 l Screenhöhe (Port+Server)
384 l -nicht öffentlich-
388 l Screenid (Port+Server)
392 w Serverprioritaet (+100)
394 w Sorterprioritaet (+100)
396 l Aktionslangwort (siehe spätere Beschreibung)
400 w Portbits (welche Ports sind offen?)
402 l 10 Langwörter folgen (Adressen der Arexxports der Ports)
620 l DIM-FELD(c) Name des Befehls
624 l DIM-FELD(c) Aufrufzeile des Befehls
628 l DIM-FELD(l) Parameter dafür
636 l DIM-FELD(c) Kommentar zum Befehl)
640 w Anzahl der Befehle
644 l DIM-FELD(b) Shortcut (Befehl)
648 l DIM-FELD(c) Gruppe (Befehl)
660 l DIM-FELD(c) Gruppennamen
664 l DIM-FELD(l) Zeiger auf LIST-Strukture mit Teilnehmernamen
für die jeweilige Gruppe. User ist ein Space vorangestellt,
Netzboxen ein '*'
668 l DIM-Feld(b) Gruppenflags
672 w Gruppenanzahl
680 l Globale Bits (Bit 0 Sysop rufbereit)
(Bit 1 Sorter aktiv)
(Bit 2 Cruncher aktiv)
(Bit 3 Prepack aktiv)
(Bit 4 Sysopoberfläche aktiv)
(Bit 10 Debugmodus)
(Bit 20-29 Netzsperre für Port gesetzt?)
(Bit 31 Schloß aktiv)
1000 c30 Sysopname
1030 c30 Boxname
1060 c80 Chatzwangsmessage
1140 c30 Ripfontpfad
1170 c30 Showprogramm
1200 c30 Externer Editor
1230 c20 Oberflächenfont
1250 c20 Textfont
1330 c30 Uploadpfad
1360 c30 Downloadpfad
1390 c30 Asciipfad
1420 c30 Ripiconpfad
1450 c10 Quotezeichen
1460 l Mindestplatz auf HD
1464 w Logoff nach Minuten
1466 w max. Kommentarzeilen
1994 l Onlineflags
1998 w Portprioritaet +100
2000 w Zeit für eine Telefoneinheit im Nahtarif (Normaltarif)
2002 w Zeit für eine Telefoneinheit im Nahtarif (Billigtarif)
2004 w Zeit für eine Telefoneinheit im Regionaltarif (Normaltarif)
2006 w Zeit für eine Telefoneinheit im Regionaltarif (Billigtarif)
2008 w Zeit für eine Telefoneinheit im Ferntarif (Normaltarif)
2010 w Zeit für eine Telefoneinheit im Ferntarif (Billigtarif)
2012 w Kosten (in PF) für eine Telefoneinheit
3000-4600 Packerfeld (10*) (160 Bytes je Feld)
0 c10 Packername
10 c40 Packstring
50 c40 Entpackstring
90 c40 Inhaltsstring
130 c10 Packerendung
140 c20 10 Byte Kennung
4600-5400 F-Tasten (10 a 80 Bytes)
5400-5500 -reserviert-
5500 l PortScreenID
5504 l Portbreite
5508 l Porthoehe
6200-6400 Sprachen (10 a 20 Bytes)
6400-6448 Boxauslastung (24 Worte, jedes Wort beinhaltet wieviele
Minuten in der jeweiligen Stunde User drin waren)
6800 c40 Pfad für neue Netzbretter
6840 c20 Netzgruppe
6860 c40 ZMAPSabsender
6900 c40 -frei-
6940 w max Kopienanzahl
6942 l Domainserver
6946 w Kosten Routpm pf/kb
6948 w Kosten Domainpm pf/kb
6950 l welche Headzeilen übernehmen
Bit 0 Mailer
Bit 1 OAB
Bit 2 OEM
Bit 3 ORG
Bit 4 POST
Bit 5 ROT
Bit 6 Telefon
7000-7600 10* Formatname(c20)+Kennung(c20)+Directory(c20)
7600-7900 5*Boxdomains(c60)
7900 c20 Netzboxname
7920 c10 Zeitzone
7930 l max Brieflänge
7934 w Wahlversuche
7936 w Wahldelay (Sekunden)
7938 w MsgId Haltezeit
8010-8018 OS3 Farben (4 Wörter)
8018-8034 Ansifarben (8 Wörter)
8034-8066 Ripfarben (16 Wörter)
8100-13100 Modemfeld (10*) (500 Bytes je Feld)
0 c20 Connect
20 c20 Endconnect
40 c20 Faxconnect
60 c30 Device
90 c30 Terminalprogramm
120 c30 Faxprogramm
150 c10 Modemreset
160 c10 Auflegen
170 c10 Ring
180 c10 Antworten
190 c10 Wählen
200 c10 Besetzen
210 c10 Init
250 l Baudrate
254 l Lamerbaud
258 b Esccode
259 b Unit
260 b Flags (Bit 0 feste DTE / Bit 1 RTS/CTS/ Bit
2 Frontdoorbetrieb)
300 c100 Faxprogramm
400 c100 Frontdoorprogramm
14000 l Zähler wieviele Messages bis jetzt geschrieben wurden
14004 l Boxanrufe
14008 l Netzanrufe
14012 l Netzanrufe heute
14016 l neue Boxen heute
14048 l Uploads
14052 l Downloads
14056 l Tagesanrufe
14060 l neue Bretter heute
14064 l neue User heute
14068 l Uploads heute
14072 l Downloads heute
14076 l Box Online (gesamt in Minuten)
14120 l Box Online (heute in Minuten)
14896 l Textfontadr
15000 l DIM-FELD(w) Max Alter
15004 l DIM-FELD(w) Max KB
15008 l DIM-FELD(l) letzte Aktualisierung (in Sekunden seit
1.1.1978)
15012 l DIM-FELD(c) Verwalter
15016 l DIM-FELD(c) Paßwort
15020 l DIM-FELD(c) Kommentar
15024 l DIM-FELD(b) Ratio (100=Userratio)
15500 l Adresse des Domainroutingfeldes im Speicher
15504 w Anzahl der Einträge im Domainroutingfeld
Im Domainroutingfeld ist jeder Eintrag 80 BYTES lang:
Gesamtlaenge ist also Anzahl der Einträge (15504)*80 Bytes
von 0-59 steht die Domain, oder die Box mit Domain oder * (Smarthost)
(Rest mit 0 Bytes aufgefüllt!)
von 60-79 steht die Routbox (ohne Domain) dafür (auch mit 0 Bytes
aufgefüllt)
15506 l Basis der 'METAXPR.LIBRARY'
15510 l Adresse des Zeitplanfeldes
15514 w Anzahl der Einträge im Zeitplanfeld
15516 l Soviel Freiraum bekommt ein Gast nach dem Antrag
15520 w Rate für neue User
15522 l Zeit für neue User
15526 l Zeiger auf LIST-Struktur mit Gruppennamen, die ein
User nach dem Antrag bekommt
15530 l ScreenID für RIP
15534 l ScreenBreite für RIP
15538 l ScreenHöhe für RIP
18000-20340 Protokollfeld (10*) (234 Bytes je Feld)
0 c30 Protokollname
30 c100 Sendestring
130 c100 Receivestring
230 l Flags
20340 c60 Skipfilename
20400 l Zeiger auf DIM-Feld für die Multiport-Inhaltsverwaltung
20404-21404 die Buffer dafür
22000-27000 2. Modemfeld (wieder 10 Ports)